package com.demo.java.OD51_100.OD72;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数组合并】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145619406
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            // 创建 Scanner 对象用于读取输入
            Scanner s = new Scanner(System.in);

            // 读取每行最多输出的元素个数
            int k = s.nextInt();
            // 读取输入的行数
            int n = s.nextInt();
            s.nextLine();  // 读取换行符，防止读取为空字符串

            // 创建一个字符串数组，用来存储每行输入的数据
            String[] strings = new String[n];
            for (int i = 0; i < strings.length; ++i) {
                // 读取每行数据
                strings[i] = s.nextLine();
            }

            // 创建 StringBuilder 用于拼接结果
            StringBuilder sb = new StringBuilder();
            // 创建一个 List，存储每行数据转换后的 LinkedList
            List<LinkedList<Integer>> lists = new ArrayList<>(n);

            // 将每行数据转为 LinkedList 存储
            for (String string : strings) {
                // 分割每行字符串，并将其转换为整数，存入 LinkedList
                LinkedList<Integer> linkedList = Arrays.stream(string.split(","))
                        .map(Integer::parseInt)
                        .collect(Collectors.toCollection(LinkedList::new));
                // 将转换后的 LinkedList 加入到 lists 中
                lists.add(linkedList);
            }

            // 记录当前操作的行索引
            int index = 0;
            // 开始循环，直到所有行的数据都被处理完
            while (!lists.isEmpty()) {
                // 获取当前行的数据
                LinkedList<Integer> list = lists.get(index);
                // 处理当前行，最多取 k 个元素
                for (int i = 0; i < k; ++i) {
                    // 如果当前行已空，移除当前行并更新索引
                    if (list.isEmpty()) {
                        lists.remove(list);
                        --index;  // 移除后索引减 1，因为列表长度缩减了
                        break;  // 退出当前循环，开始处理下一个行
                    }
                    // 将当前行的第一个元素加入到 StringBuilder 中
                    sb.append(list.removeFirst()).append(",");
                }
                // 更新索引，循环处理
                ++index;
                // 如果索引超过了列表的大小，则重新从头开始
                if (index >= lists.size()) {
                    index = 0;
                }
            }
            // 去掉最后多余的逗号并输出最终结果
            System.out.println(sb.substring(0, sb.length() - 1));
        } catch (Exception e) {
            // 捕获任何异常并打印异常信息，输出错误提示
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}